#Boa:Dialog:ModifClientes

import wx
from wx.lib.anchors import LayoutAnchors
import consultasBD
import utiles
import Buscaclientes
import sincronizar_tabla  

def create(parent):
    return ModifClientes(parent)

[wxID_MODIFCLIENTES, wxID_MODIFCLIENTESBOTONGUARDAR, 
 wxID_MODIFCLIENTESBOTONSALIR, wxID_MODIFCLIENTESBUTTON1, 
 wxID_MODIFCLIENTESCHECKBOX1, wxID_MODIFCLIENTESCUITNRO, 
 wxID_MODIFCLIENTESDATOSENTREGARESUMEN, wxID_MODIFCLIENTESINACUMULADOS, 
 wxID_MODIFCLIENTESINCODIGO, wxID_MODIFCLIENTESINCP, wxID_MODIFCLIENTESINDIA, 
 wxID_MODIFCLIENTESINDIRECCION, wxID_MODIFCLIENTESINEMAIL, 
 wxID_MODIFCLIENTESINLOCALIDAD, wxID_MODIFCLIENTESINMES, 
 wxID_MODIFCLIENTESINNOMBRE, wxID_MODIFCLIENTESINPROVINCIA, 
 wxID_MODIFCLIENTESINSUCURSAL, wxID_MODIFCLIENTESINTELEFONO, 
 wxID_MODIFCLIENTESOBSERVACIONES, wxID_MODIFCLIENTESRADIOBOX1, 
 wxID_MODIFCLIENTESSITUACIONFISCAL, wxID_MODIFCLIENTESSTATICLINE1, 
 wxID_MODIFCLIENTESSTATICTEXT1, wxID_MODIFCLIENTESSTATICTEXT2, 
 wxID_MODIFCLIENTESSTATICTEXT3, wxID_MODIFCLIENTESSTATICTEXT4, 
 wxID_MODIFCLIENTESSTATICTEXT5, wxID_MODIFCLIENTESSTATICTEXT6, 
 wxID_MODIFCLIENTESTEXTCP, wxID_MODIFCLIENTESTEXTCTRL1, 
 wxID_MODIFCLIENTESTIPODOC, wxID_MODIFCLIENTESTXACUMULADOS, 
 wxID_MODIFCLIENTESTXTCODIGO, wxID_MODIFCLIENTESTXTCONTACTO, 
 wxID_MODIFCLIENTESTXTCUMPLE, wxID_MODIFCLIENTESTXTDIRECCION, 
 wxID_MODIFCLIENTESTXTEMAIL, wxID_MODIFCLIENTESTXTLOCALIDAD, 
 wxID_MODIFCLIENTESTXTNOMBRE, wxID_MODIFCLIENTESTXTPROVINCIA, 
 wxID_MODIFCLIENTESTXTSUCURSAL, wxID_MODIFCLIENTESTXTTELEFONO, 
] = [wx.NewId() for _init_ctrls in range(43)]

class ModifClientes(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_MODIFCLIENTES, name='ModifClientes',
              parent=prnt, pos=wx.Point(79, 48), size=wx.Size(752, 365),
              style=wx.TAB_TRAVERSAL | wx.DEFAULT_DIALOG_STYLE,
              title='Modifica Clientes')
        self.SetClientSize(wx.Size(744, 338))
        self.SetToolTipString('ABMClientes')

        self.tipodoc = wx.Choice(choices=['DNI', 'LC', 'CI', 'CUIT', 'CUIL',
              'Pasaporte', 'LE'], id=wxID_MODIFCLIENTESTIPODOC, name='tipodoc',
              parent=self, pos=wx.Point(97, 51), size=wx.Size(72, 21), style=0)

        self.cuitnro = wx.TextCtrl(id=wxID_MODIFCLIENTESCUITNRO, name='cuitnro',
              parent=self, pos=wx.Point(265, 52), size=wx.Size(80, 21), style=0,
              value='')
        self.cuitnro.SetMaxLength(11)

        self.innombre = wx.TextCtrl(id=wxID_MODIFCLIENTESINNOMBRE,
              name='innombre', parent=self, pos=wx.Point(96, 78),
              size=wx.Size(250, 21), style=0, value='')
        self.innombre.SetMaxLength(50)
        self.innombre.SetThemeEnabled(False)

        self.indireccion = wx.TextCtrl(id=wxID_MODIFCLIENTESINDIRECCION,
              name='indireccion', parent=self, pos=wx.Point(96, 106),
              size=wx.Size(250, 21), style=0, value='')
        self.indireccion.SetMaxLength(50)

        self.intelefono = wx.TextCtrl(id=wxID_MODIFCLIENTESINTELEFONO,
              name='intelefono', parent=self, pos=wx.Point(96, 133),
              size=wx.Size(105, 21), style=0, value='')
        self.intelefono.SetMaxLength(15)

        self.inlocalidad = wx.TextCtrl(id=wxID_MODIFCLIENTESINLOCALIDAD,
              name='inlocalidad', parent=self, pos=wx.Point(416, 51),
              size=wx.Size(133, 21), style=0, value='')
        self.inlocalidad.SetMaxLength(25)

        self.incp = wx.TextCtrl(id=wxID_MODIFCLIENTESINCP, name='incp',
              parent=self, pos=wx.Point(416, 80), size=wx.Size(72, 21), style=0,
              value='')

        self.inemail = wx.TextCtrl(id=wxID_MODIFCLIENTESINEMAIL, name='inemail',
              parent=self, pos=wx.Point(416, 108), size=wx.Size(133, 21),
              style=0, value='')
        self.inemail.SetMaxLength(30)

        self.checkBox1 = wx.CheckBox(id=wxID_MODIFCLIENTESCHECKBOX1,
              label='No enviar e-mail', name='checkBox1', parent=self,
              pos=wx.Point(416, 132), size=wx.Size(104, 13), style=0)
        self.checkBox1.SetValue(False)

        self.inprovincia = wx.TextCtrl(id=wxID_MODIFCLIENTESINPROVINCIA,
              name='inprovincia', parent=self, pos=wx.Point(612, 51),
              size=wx.Size(104, 21), style=0, value='')
        self.inprovincia.SetMaxLength(25)

        self.india = wx.TextCtrl(id=wxID_MODIFCLIENTESINDIA, name='india',
              parent=self, pos=wx.Point(612, 76), size=wx.Size(24, 21), style=0,
              value='00')
        self.india.SetMaxLength(2)

        self.inmes = wx.TextCtrl(id=wxID_MODIFCLIENTESINMES, name='inmes',
              parent=self, pos=wx.Point(636, 76), size=wx.Size(24, 21), style=0,
              value='00')
        self.inmes.SetMaxLength(2)

        self.situacionfiscal = wx.Choice(choices=['Inscripto', 'Cons. Final',
              'Monotributo'], id=wxID_MODIFCLIENTESSITUACIONFISCAL,
              name='situacionfiscal', parent=self, pos=wx.Point(96, 187),
              size=wx.Size(105, 21), style=0)

        self.observaciones = wx.TextCtrl(id=wxID_MODIFCLIENTESOBSERVACIONES,
              name='observaciones', parent=self, pos=wx.Point(358, 152),
              size=wx.Size(256, 48), style=0, value='')
        self.observaciones.SetMaxLength(60)

        self.botonguardar = wx.Button(id=wxID_MODIFCLIENTESBOTONGUARDAR,
              label='Guardar', name='botonguardar', parent=self,
              pos=wx.Point(392, 296), size=wx.Size(75, 32), style=0)
        self.botonguardar.Bind(wx.EVT_BUTTON, self.OnBotonguardarButton,
              id=wxID_MODIFCLIENTESBOTONGUARDAR)

        self.botonsalir = wx.Button(id=wxID_MODIFCLIENTESBOTONSALIR,
              label='Cancelar', name='botonsalir', parent=self,
              pos=wx.Point(556, 296), size=wx.Size(75, 32), style=0)
        self.botonsalir.Bind(wx.EVT_BUTTON, self.OnCancelar,
              id=wxID_MODIFCLIENTESBOTONSALIR)

        self.txtnombre = wx.StaticText(id=wxID_MODIFCLIENTESTXTNOMBRE,
              label='Nombre', name='txtnombre', parent=self, pos=wx.Point(16,
              80), size=wx.Size(37, 13), style=0)

        self.txtdireccion = wx.StaticText(id=wxID_MODIFCLIENTESTXTDIRECCION,
              label=u'Direcci\xf3n', name='txtdireccion', parent=self,
              pos=wx.Point(16, 109), size=wx.Size(43, 13), style=0)

        self.txtcodigo = wx.StaticText(id=wxID_MODIFCLIENTESTXTCODIGO,
              label='Codigo', name='txtcodigo', parent=self, pos=wx.Point(182,
              7), size=wx.Size(33, 15), style=0)
        self.txtcodigo.Show(False)

        self.incodigo = wx.TextCtrl(id=wxID_MODIFCLIENTESINCODIGO,
              name='incodigo', parent=self, pos=wx.Point(232, 6),
              size=wx.Size(80, 21), style=0, value='')
        self.incodigo.SetEditable(False)
        self.incodigo.Show(False)

        self.txttelefono = wx.StaticText(id=wxID_MODIFCLIENTESTXTTELEFONO,
              label=u'Tel\xe9fono', name='txttelefono', parent=self,
              pos=wx.Point(14, 136), size=wx.Size(42, 13), style=0)

        self.txtemail = wx.StaticText(id=wxID_MODIFCLIENTESTXTEMAIL,
              label='E-Mail', name='txtemail', parent=self, pos=wx.Point(359,
              107), size=wx.Size(28, 13), style=0)

        self.txtlocalidad = wx.StaticText(id=wxID_MODIFCLIENTESTXTLOCALIDAD,
              label='Localidad', name='txtlocalidad', parent=self,
              pos=wx.Point(359, 51), size=wx.Size(44, 13), style=0)

        self.txtprovincia = wx.StaticText(id=wxID_MODIFCLIENTESTXTPROVINCIA,
              label='Provincia', name='txtprovincia', parent=self,
              pos=wx.Point(564, 53), size=wx.Size(43, 13), style=0)

        self.txtcumple = wx.StaticText(id=wxID_MODIFCLIENTESTXTCUMPLE,
              label='Cumple', name='txtcumple', parent=self, pos=wx.Point(565,
              78), size=wx.Size(35, 13), style=0)

        self.txacumulados = wx.StaticText(id=wxID_MODIFCLIENTESTXACUMULADOS,
              label='$ Acumulados', name='txacumulados', parent=self,
              pos=wx.Point(14, 161), size=wx.Size(66, 13), style=0)

        self.inacumulados = wx.TextCtrl(id=wxID_MODIFCLIENTESINACUMULADOS,
              name='inacumulados', parent=self, pos=wx.Point(96, 159),
              size=wx.Size(104, 21), style=0, value='0.0')
        self.inacumulados.SetEditable(False)

        self.txtcontacto = wx.StaticText(id=wxID_MODIFCLIENTESTXTCONTACTO,
              label='Observaciones', name='txtcontacto', parent=self,
              pos=wx.Point(272, 148), size=wx.Size(71, 13), style=0)

        self.txtsucursal = wx.StaticText(id=wxID_MODIFCLIENTESTXTSUCURSAL,
              label='Sucursal', name='txtsucursal', parent=self,
              pos=wx.Point(16, 6), size=wx.Size(40, 13), style=0)

        self.insucursal = wx.TextCtrl(id=wxID_MODIFCLIENTESINSUCURSAL,
              name='insucursal', parent=self, pos=wx.Point(98, 6),
              size=wx.Size(70, 21), style=0, value='')
        self.insucursal.SetEditable(False)

        self.staticText1 = wx.StaticText(id=wxID_MODIFCLIENTESSTATICTEXT1,
              label=u'Situaci\xf3n Fiscal', name='staticText1', parent=self,
              pos=wx.Point(14, 190), size=wx.Size(72, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_MODIFCLIENTESSTATICTEXT2,
              label='Nro. Documento', name='staticText2', parent=self,
              pos=wx.Point(182, 54), size=wx.Size(78, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_MODIFCLIENTESSTATICTEXT3,
              label='Tipo Documento', name='staticText3', parent=self,
              pos=wx.Point(16, 54), size=wx.Size(77, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_MODIFCLIENTESSTATICTEXT4,
              label=u'(D\xeda/Mes)', name='staticText4', parent=self,
              pos=wx.Point(668, 75), size=wx.Size(46, 13), style=0)

        self.staticLine1 = wx.StaticLine(id=wxID_MODIFCLIENTESSTATICLINE1,
              name='staticLine1', parent=self, pos=wx.Point(17, 224),
              size=wx.Size(695, 2), style=0)

        self.textcp = wx.StaticText(id=wxID_MODIFCLIENTESTEXTCP,
              label='Cod.Postal', name='textcp', parent=self, pos=wx.Point(359,
              80), size=wx.Size(52, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_MODIFCLIENTESSTATICTEXT5,
              label='Donde Entregar el resumen:', name='staticText5',
              parent=self, pos=wx.Point(312, 256), size=wx.Size(136, 13),
              style=0)

        self.datosentregaresumen = wx.TextCtrl(id=wxID_MODIFCLIENTESDATOSENTREGARESUMEN,
              name='datosentregaresumen', parent=self, pos=wx.Point(448, 256),
              size=wx.Size(208, 21), style=0, value='@')

        self.radioBox1 = wx.RadioBox(choices=["SI. Recibir el resumen", "No"],
              id=wxID_MODIFCLIENTESRADIOBOX1, label='Resumen Cta. Cte.',
              majorDimension=2, name='radioBox1', parent=self, pos=wx.Point(32,
              240), size=wx.Size(264, 56), style=wx.RA_SPECIFY_COLS)

        self.radioBox1 = wx.RadioBox(choices=["SI. Recibir el resumen", "No"],
              id=wxID_MODIFCLIENTESRADIOBOX1, label='Resumen Cta. Cte.',
              majorDimension=2, name='radioBox1', parent=self, pos=wx.Point(32,
              240), size=wx.Size(264, 56), style=wx.RA_SPECIFY_COLS)

        self.staticText6 = wx.StaticText(id=wxID_MODIFCLIENTESSTATICTEXT6,
              label='Tarjeta Sussan', name='staticText6', parent=self,
              pos=wx.Point(336, 8), size=wx.Size(72, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_MODIFCLIENTESTEXTCTRL1,
              name='textCtrl1', parent=self, pos=wx.Point(416, 8),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl1.SetEditable(False)

        self.button1 = wx.Button(id=wxID_MODIFCLIENTESBUTTON1,
              label='Modificar Club Sussan', name='button1', parent=self,
              pos=wx.Point(496, 8), size=wx.Size(120, 23), style=0)

    def __init__(self, parent,idcliente):
        self._init_ctrls(parent)
        self.insucursal.ChangeValue(utiles.getSucursalActiva())
        self.carga(idcliente)
        
    def carga(self,idcliente):
        SQL = "SELECT * FROM cliente WHERE idcliente='%s'" % idcliente
        resultado = consultasBD.ordenCrudaResultDict(SQL)
        self.incodigo.ChangeValue(idcliente)
        self.innombre.ChangeValue(resultado['nombre'])
        self.indireccion.ChangeValue(resultado['direccion'])
        self.inlocalidad.ChangeValue(resultado['localidad'])
        self.inprovincia.ChangeValue(resultado['provincia'])
        self.incp.ChangeValue(resultado['cp']) 
        self.intelefono.ChangeValue(resultado['telefono'])
        self.inacumulados.ChangeValue(str(resultado['acumulados']))
        self.observaciones.ChangeValue(str(resultado['observaciones']))
        self.india.ChangeValue(str(resultado['cumple'][:2]))
        self.inmes.ChangeValue(str(resultado['cumple'][3:]))
        if str(resultado['listanegra'])=="1":
            self.checkBox1.SetValue(True)
        self.radioBox1.SetSelection(int(resultado['reciberesumen']))
        self.datosentregaresumen.ChangeValue(str(resultado['donderesumen']))
        self.textCtrl1.SetLabel(str(resultado['tarjetasussan']))
        #if self.radioBox1.Selection == 0 :
        #    self.datosentregaresumen.Enabled
        #else:
        #    self.datosentregaresumen.Enable
        
        self.inemail.ChangeValue(resultado['email'])
        self.cuitnro.ChangeValue(resultado['nrodoc'])
        if resultado['tipodoc']=="DNI":
            indice = 0 
        if resultado['tipodoc']=="LC":
            indice = 1
        if resultado['tipodoc']=="CI":
            indice = 2
        if resultado['tipodoc']=="CUIT":
            indice = 3
        if resultado['tipodoc']=="CUIL":
            indice = 4
        if resultado['tipodoc']=="Pasaporte":
            indice = 5
        if resultado['tipodoc']=="LE":
            indice = 6

        if resultado['situacionfiscal']=='Inscripto':
            situfis = 0
        if resultado['situacionfiscal']=='Cons. Final':
            situfis = 1
        if resultado['situacionfiscal']=='Monotributo':
            situfis = 2

        self.tipodoc.Select(indice)
        self.situacionfiscal.Select(situfis)

    def _guardar_cliente(self):
        fechaActual = utiles.getfechaInverse()
        fechaCumple = self.india.GetValue()+"/"+self.inmes.GetValue()
        nombre = str(self.innombre.Value)
        direccion = str(self.indireccion.Value)
        localidad = str(self.inlocalidad.Value)
        provincia = str(self.inprovincia.Value)
        cp = str(self.incp.Value)
        telefono = str(self.intelefono.Value)
        email = str(self.inemail.Value)
        cumple = str(fechaCumple)
        observaciones = str(self.observaciones.Value)
        situacionfiscal = str(self.situacionfiscal.GetLabel())
        tipodoc = str(self.tipodoc.GetLabel())
        nrodoc = str(self.cuitnro.Value)
        reciberesumen = str(self.radioBox1.Selection)
        donderesumen = str(self.datosentregaresumen.GetValue())
        tarjetasussan = str(self.textCtrl1.GetLabel())
        if self.checkBox1.GetValue():
            listanegra = "1"
        else:
            listanegra = "0"
        
        aux1 = "nombre='%s',direccion='%s',localidad='%s'," % (nombre,direccion,localidad)
        aux2 = "provincia='%s',cp='%s',telefono='%s'," % (provincia,cp,telefono)
        aux3 = "email='%s',cumple='%s',observaciones='%s'," % (email,cumple,observaciones)
        aux4 = "situacionfiscal='%s',tipodoc='%s',nrodoc='%s'," % (situacionfiscal,tipodoc,nrodoc)
        aux5 = "reciberesumen='%s',donderesumen='%s',listanegra='%s'," % (reciberesumen,donderesumen,listanegra)
        aux6 = "tarjetasussan='%s'" % (tarjetasussan)
        campos = aux1+aux2+aux3+aux4+aux5+aux6
        
        SQL = "UPDATE cliente SET "+campos+" WHERE idcliente='%s'" % (str(self.incodigo.Value))
    
        consultasBD.ordenCrudaSinCommit(SQL)
        sincronizar_tabla.addChange(sql=SQL)
    
    def OnBotonguardarButton(self, event):
        idcliente = self.incodigo.GetValue()
        verificacion = self.verificar()
        if not verificacion[0]:
            utiles.mensaje(self,verificacion[1])
            return
        try:
            consultasBD.begin()
            self._guardar_cliente()
            consultasBD.commit()
            #sincronizar_tabla.syncServerTables(self, ["cliente"])
            utiles.mensaje(self, "El cliente se guardo y transmitio correctamente")                        
        except sincronizar_tabla.SyncError:
            utiles.mensaje(self, "El cliente se guardo \n pero no termino de transmitirse por favor realize un sincronizacion")    
        except Exception, e:
            print e.__str__()
            utiles.mensaje(self, "NO se pudo guardar el cliente")    
            consultasBD.rollback()                                         
            
        self.Close()            

    def controlCaracter(self,aux,tipo = 0):
        if tipo == 0:
            for caracter in aux: #texto con numeros, puntos, comas, guiones, espacios y caracteres acentuados, dieresis y acentos franceses
                if (ord(caracter) not in range(65,91)) and \
                   (ord(caracter) not in range(97,123)) and \
                   (ord(caracter) not in [129,130,132,133,137,138,139,141,148,149,151,160,161,162,163,164,165,248]) and \
                   (ord(caracter) not in range(48,58)) and \
                   (caracter not in ["."," ","-",","]):
                       return True
        elif tipo == 1: #nombres
            for caracter in aux:
                if (ord(caracter) not in range(65,91)) and \
                   (ord(caracter) not in range(97,123)) and \
                   (caracter not in ["."," ","*","(",")","-"]):
                       return True
        elif tipo == 2: #numeros con guiones y parentesis
            for caracter in aux:
                if (ord(caracter) not in range(48,58)) and \
                   (caracter not in ["-","(",")"]):
                       return True
        elif tipo == 3: #numeros sin caracteres
            for caracter in aux:
                if (ord(caracter) not in range(48,58)):
                       return True
        elif tipo == 4: #correos validos
            if aux.count("@") != 1:
                return True
            for caracter in aux:
                if (ord(caracter) not in range(65,91)) and \
                   (ord(caracter) not in range(97,123)) and \
                   (ord(caracter) not in range(48,58)) and \
                   (caracter not in [".","-","_","@"]):
                       return True
        elif tipo == 5: #valores numericos / saldos / acumulados, etc
            if aux.count(".") > 1:
                return True
            for caracter in aux:
                if (ord(caracter) not in range(48,58)) and \
                   (caracter not in ["."]):
                       return True
        return False

    def verificar(self):
        error = ""
        #VERIFICACION DE NO NULIDAD
        if (self.innombre.GetValue() == ""):
            return (False, "Nombre no puede estar vacio")
        #VERIFICACION DE CARACTERES INVALIDOS EN CAMPOS TEXTOS Y NUMERICOS
        #verificar caracteres raros en nombre
        aux = self.innombre.GetValue()
        if aux != "": self.innombre.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux, 1): error += "Caracteres invalidos en Nombre\n"
        #verificar caracteres raros en direccion
        aux = self.indireccion.GetValue()
        if aux != "": self.indireccion.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux): error += "Caracteres invalidos en Direccion\n"
        #verificar caracteres raros en localidad
        aux = self.inlocalidad.GetValue()
        if aux != "": self.inlocalidad.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux): error += "Caracteres invalidos en Localidad\n"
        #verificar caracteres raros en provincia
        aux = self.inprovincia.GetValue()
        if aux != "": self.inprovincia.ChangeValue(aux.strip())
        if aux != "":
            if self.controlCaracter(aux, 1): error += "Caracteres invalidos en Provincia\n"
        #verificar caracteres raros en telefono
        aux = self.intelefono.GetValue()
        if aux != "": self.intelefono.ChangeValue(aux.strip())
        aux = self.intelefono.GetValue()
        if aux != "":
            if self.controlCaracter(aux,2): error += "Caracteres invalidos en Telefono\n"
        #verificar caracteres raros en acumulados
        if self.inacumulados.GetValue() == "": self.inacumulados.ChangeValue("0.0")
        aux = self.inacumulados.GetValue()
        if aux != "": self.inacumulados.ChangeValue(aux.strip())
        aux = self.inacumulados.GetValue()
        if aux != "":
            if self.controlCaracter(aux,5): error += "Caracteres invalidos en Acumulados\n"
        #verificar caracteres raros en email
        aux = self.inemail.GetValue()
        if aux != "": self.inemail.ChangeValue(aux.strip())
        aux = self.inemail.GetValue()
        if aux != "":
            aux = self.inemail.GetValue()
            if self.controlCaracter(aux,4): error += "Caracteres invalidos en e-mail\n"
        #verificar caracteres raros en numero documento
        aux = self.cuitnro.GetValue()
        if aux != "": self.cuitnro.ChangeValue(aux.strip())
        aux = self.cuitnro.GetValue()
        if aux != "":
            if self.controlCaracter(aux,3): error += "Caracteres invalidos en Nro. de Documento\n"
        #verificar caracteres raros en numero dia
        aux = self.india.GetValue()
        if aux != "": self.india.ChangeValue(aux.strip())
        aux = self.india.GetValue()
        if aux != "":
            if self.controlCaracter(aux,3): error += "Caracteres invalidos en Dia\n"
        #verificar caracteres raros en numero mes
        aux = self.inmes.GetValue()
        if aux != "": self.inmes.ChangeValue(aux.strip())
        aux = self.inmes.GetValue()
        if aux != "":
            if self.controlCaracter(aux,3): error += "Caracteres invalidos en Mes\n"
        
        #CONTROL DE FECHAS
        #verificacion de fechas de nacimiento correctas (el anio no va por cortesia)
        if ("Dia" not in error) and ("Mes" not in error):
            dia = self.india.GetValue()
            mes = self.inmes.GetValue()
            if ((len(dia) == 2) and (len(mes) == 2)):
                dia = int(dia)
                mes = int(mes)
                if (dia != 0 or mes != 0):
                    if mes not in range(1,13):
                        error += "Mes invalido\n"
                        self.india.ChangeValue("00")
                        self.inmes.ChangeValue("00")
                    else:
                        if dia not in range(1,31):
                            error += "Dia invalido\n"
                            self.india.ChangeValue("00")
                            self.inmes.ChangeValue("00")
                        else:
                            if (mes == 2) and (dia > 28):
                                error += "Dia invalido para el Mes indicado\n"
                                self.india.ChangeValue("00")
                                self.inmes.ChangeValue("00")
                            elif (mes in [4,6,9,11]):
                                if dia > 30: 
                                    error += "Dia invalido para el Mes indicado\n"
                                    self.india.ChangeValue("00")
                                    self.inmes.ChangeValue("00")
            else:
                if ((dia != "") or (mes != "")):
                    error += "Dia y Mes deben contener dos digitos numericos\nEjemplos: 02, 12, 30, 04, 11"
                self.india.ChangeValue("00")
                self.inmes.ChangeValue("00")
                
        #CONTROL DE DOCUMENTOS
        if error == "":
            situacion = self.situacionfiscal.GetLabel()
            if situacion == "":
                error += "Debe indicarse la situacion fiscal del cliente\n"
            tipoDoc = self.tipodoc.GetLabel()
            if tipoDoc == "":
                error += "Debe indicarse un tipo de documento\n"

            numeroDoc = self.cuitnro.GetValue()
            if numeroDoc == "":
                self.cuitnro.ChangeValue("99999999")

            if tipoDoc in ["CUIL","CUIT"]:
                if not utiles.validarCuit(numeroDoc):
                    error += "Numero CUIT/CUIL incorrecto. Verifique"

            if ((situacion == "Inscripto") or (situacion == "Monotributo")) and (tipoDoc != "CUIT"):
                error += "Para la Situacion Fiscal informada\ndebe introducir CUIT como Tipo de Documento\n"
            
        if error != "":
            return (False, error)
        
        return (True,"")

    def OnLimpiarFormulario(self, event):
        self.innombre.ChangeValue("")
        self.indireccion.ChangeValue("")
        self.inlocalidad.ChangeValue("")
        self.inprovincia.ChangeValue("")
        self.intelefono.ChangeValue("")
        self.inemail.ChangeValue("")
        self.india.ChangeValue("00")
        self.inmes.ChangeValue("00")
        self.inacumulados.ChangeValue("0.0")
        self.observaciones.ChangeValue("")
        self.situacionfiscal.SetLabel("Cons. Final")
        self.tipodoc.SetLabel("DNI")
        self.cuitnro.ChangeValue("")
        self.checkBox1.SetValue(False)

    def OnCancelar(self, event):
        self.Close()
        return ""
        
    def Muestraid(self):
        return self.incodigo.GetValue()
